package reflect; 
 /*
 @Time: 2022/8/20 19:02
 @Author:GShuai
 @File:ReflectDemo2.class
 @Software:IntelliJ IDEA
*/

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Scanner;

/**
 *使用有参构造器实例化对象
 */
public class ReflectDemo3 {

    public static  void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
        Person p = new Person("张三",21);
        System.out.println(p);


        // 1 获取类对象
        Class cls = Class.forName("reflect.Person");
        /*
            2通过类对象获取特定的构造器
            Constructor:构造器

            Class提供的获取特定构造器的方法:
            Constructor getConstructor(Class... argsType)
            要将特定构造器的参数类型对应的类对象有序传入即可

            java.lang.reflect.Constructor构造器对象，该类的每一个实例表示一个构造器
         */

        // 获取 Person(String,int)
        Constructor  c = cls.getConstructor(String.class,int.class);


        // 3 利用构造器实例化对象
        Object obj = c.newInstance("李四",18);   // new Person("张三",18)
        System.out.println(obj);
    }
}
